const User = require('../models/User');
const bcrypt = require('bcryptjs');

/**
 * 种子数据服务
 * 基于Flutter lib/complete_database_init.dart的功能迁移
 */
class SeedService {
  
  /**
   * 初始化所有种子数据
   */
  static async initializeAll() {
    console.log('🌱 开始初始化种子数据...');
    
    try {
      await this.clearAllData();
      await this.createTestUsers();
      await this.createAttractions();
      await this.createHotels();
      await this.createSamplePosts();
      
      console.log('✅ 种子数据初始化完成！');
      return { success: true, message: '种子数据初始化完成' };
    } catch (error) {
      console.error('❌ 种子数据初始化失败:', error);
      throw error;
    }
  }

  /**
   * 清空所有数据
   */
  static async clearAllData() {
    console.log('🧹 清空现有数据...');
    
    await User.deleteMany({});
    // 这里可以添加其他模型的清空操作
    
    console.log('✅ 数据清空完成');
  }

  /**
   * 创建测试用户（基于lib中的用户数据）
   */
  static async createTestUsers() {
    console.log('👥 创建测试用户...');
    
    const testUsers = [
      {
        username: 'testuser1',
        email: 'testuser1@demo.com',
        password: '123456',
        name: '测试用户1',
        bio: '我是测试用户1，喜欢探索世界各地的美景',
        location: '北京',
        isVerified: false
      },
      {
        username: 'testuser2',
        email: 'testuser2@demo.com',
        password: '123456',
        name: '测试用户2',
        bio: '我是测试用户2，热爱摄影和旅行',
        location: '上海',
        isVerified: true
      },
      {
        username: 'testuser3',
        email: 'testuser3@demo.com',
        password: '123456',
        name: '测试用户3',
        bio: '我是测试用户3，喜欢美食和文化',
        location: '广州',
        isVerified: false
      },
      {
        username: 'testuser4',
        email: 'testuser4@demo.com',
        password: '123456',
        name: '测试用户4',
        bio: '我是测试用户4，专注于历史探索',
        location: '西安',
        isVerified: false
      },
      {
        username: 'testuser5',
        email: 'testuser5@demo.com',
        password: '123456',
        name: '测试用户5',
        bio: '我是测试用户5，喜欢自然风光',
        location: '成都',
        isVerified: false
      }
    ];

    const createdUsers = [];
    
    for (const userData of testUsers) {
      try {
        const user = new User(userData);
        await user.save();
        createdUsers.push(user);
        console.log(`✅ 创建用户: ${user.name} (@${user.username})`);
      } catch (error) {
        console.error(`❌ 创建用户失败 ${userData.username}:`, error.message);
      }
    }

    // 建立关注关系
    await this.createFollowRelationships(createdUsers);
    
    console.log(`✅ 测试用户创建完成 (${createdUsers.length}个用户)`);
    return createdUsers;
  }

  /**
   * 创建关注关系
   */
  static async createFollowRelationships(users) {
    console.log('🔗 建立关注关系...');
    
    try {
      // testuser1 关注 testuser2, testuser3
      await users[0].followUser(users[1]._id);
      await users[0].followUser(users[2]._id);

      // testuser2 关注 testuser1
      await users[1].followUser(users[0]._id);

      // testuser3 关注 testuser1, testuser4, testuser5
      await users[2].followUser(users[0]._id);
      await users[2].followUser(users[3]._id);
      await users[2].followUser(users[4]._id);

      // testuser4 关注 testuser3, testuser5
      await users[3].followUser(users[2]._id);
      await users[3].followUser(users[4]._id);

      // testuser5 关注 testuser3
      await users[4].followUser(users[2]._id);

      console.log('✅ 关注关系建立完成');
    } catch (error) {
      console.error('❌ 建立关注关系失败:', error);
    }
  }

  /**
   * 创建景点数据（基于lib中的景点数据）
   */
  static async createAttractions() {
    console.log('🏛️ 创建景点数据...');
    
    // 这里需要创建Attraction模型，暂时记录结构
    const attractionsData = [
      {
        name: '雅典卫城',
        nameEn: 'Acropolis of Athens',
        description: '古希腊文明的象征，世界文化遗产',
        category: '历史遗迹',
        location: {
          city: '雅典',
          country: '希腊',
          coordinates: { lat: 37.9715, lng: 23.7267 }
        },
        images: [
          'https://example.com/acropolis1.jpg',
          'https://example.com/acropolis2.jpg'
        ],
        rating: 4.8,
        reviewCount: 1250,
        openingHours: '8:00-20:00',
        ticketPrice: { adult: 20, student: 10, child: 0 },
        tags: ['历史', '文化', '世界遗产'],
        isRecommended: true
      },
      {
        name: '圣托里尼岛',
        nameEn: 'Santorini',
        description: '爱琴海上的明珠，浪漫的度假胜地',
        category: '自然景观',
        location: {
          city: '圣托里尼',
          country: '希腊',
          coordinates: { lat: 36.3932, lng: 25.4615 }
        },
        images: [
          'https://example.com/santorini1.jpg',
          'https://example.com/santorini2.jpg'
        ],
        rating: 4.9,
        reviewCount: 2100,
        openingHours: '全天开放',
        ticketPrice: { adult: 0, student: 0, child: 0 },
        tags: ['海岛', '浪漫', '日落'],
        isRecommended: true
      }
    ];

    console.log(`✅ 景点数据准备完成 (${attractionsData.length}个景点)`);
    // 实际保存需要Attraction模型
  }

  /**
   * 创建酒店数据
   */
  static async createHotels() {
    console.log('🏨 创建酒店数据...');
    
    const hotelsData = [
      {
        name: '雅典豪华酒店',
        nameEn: 'Athens Luxury Hotel',
        description: '位于雅典市中心的五星级酒店',
        category: '五星级酒店',
        location: {
          city: '雅典',
          country: '希腊',
          address: '雅典市中心商业区',
          coordinates: { lat: 37.9838, lng: 23.7275 }
        },
        rating: 4.7,
        reviewCount: 520,
        priceRange: { min: 150, max: 300, currency: 'EUR' },
        amenities: ['WiFi', '游泳池', '健身房', '水疗中心', '餐厅'],
        isRecommended: true
      }
    ];

    console.log(`✅ 酒店数据准备完成 (${hotelsData.length}个酒店)`);
  }

  /**
   * 创建示例帖子
   */
  static async createSamplePosts() {
    console.log('📝 创建示例帖子...');
    
    // 这里需要Post模型
    console.log('✅ 示例帖子准备完成');
  }

  /**
   * 获取数据库统计信息
   */
  static async getDatabaseStats() {
    console.log('📊 获取数据库统计...');
    
    const stats = {
      users: await User.countDocuments(),
      // attractions: await Attraction.countDocuments(), // 需要模型
      // hotels: await Hotel.countDocuments(), // 需要模型
      // posts: await Post.countDocuments(), // 需要模型
    };

    return stats;
  }

  /**
   * 验证数据完整性
   */
  static async validateData() {
    console.log('🔍 验证数据完整性...');
    
    const users = await User.find();
    
    console.log('👥 用户验证:');
    users.forEach(user => {
      console.log(`✅ ${user.email} -> ${user.name} (@${user.username})`);
      console.log(`   关注: ${user.followingCount}, 粉丝: ${user.followersCount}`);
    });

    return {
      totalUsers: users.length,
      verifiedUsers: users.filter(u => u.isVerified).length,
      activeUsers: users.filter(u => u.isActive).length
    };
  }
}

module.exports = SeedService; 